package com.info.zhiduoduo.core.filter;

import com.info.zhiduoduo.common.constants.SmartResult;
import com.info.zhiduoduo.repository.dto.maker.MakerDetailDto;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author tianyonghong
 * @create 2023/6/19
 */
@Data
public class FilterChain {

    // 链表
    private List<Filter> filters = new ArrayList<Filter>();

    private int index = 0;// 调用链上的过滤器时，记录过滤器的位置用

    private MakerDetailDto userData;// 用户数据

    // 构造方法
    public FilterChain(MakerDetailDto data) {
        this.userData = data;
    }

    // 根据账号信息，构建过滤链
    public static FilterChain createFromUserInfo(MakerDetailDto data) {
        FilterChain chain = new FilterChain(data);
        return chain;
    }

    // 新增过滤器
    public FilterChain addFilter(Filter f) {
        filters.add(f);
        return this;
    }

    // 执行过滤
    public void doFilter(SmartResult result) {
        if (index == filters.size()){
            return;
        }

        Filter f = filters.get(index);
        index++;
        f.run(result, this);
    }
}
